QTI's LAB (LCD/AMOLED BOOST)/IBB (Inverting Buck-Boost) Regulator

LAB can be used as a standalone positive boost power supply for general purpose
applications. IBB can be used as a standalone negative power supply for general
applications. Also, LAB and IBB can be used together to provide power supply for
display panels, LCD or AMOLED.

Main node required properties:

- compatible:			Must be "qcom,qpnp-labibb-regulator"
- qcom,qpnp-labibb-mode:	A string used to specify the working mode of LAB/IBB
				regulators when bootloader does not turned on the
				display panel. Could be "lcd" or "amoled".
				"lcd" means using LAB and IBB regulators are
				configured for LCD mode.
				"amoled" means using LAB and IBB regulators are
				configured for AMOLED mode.
- qcom,pmic-revid:		Specifies the phandle of the PMIC revid module.
				Used to identify the PMIC subtype.

Main node optional properties:

- qcom,qpnp-labibb-touch-to-wake-en:	A boolean property which upon set will
					enable support for touch-to-wake mode
					by configuring the required settings
					in LAB and IBB modules. Make sure the
					hardware has needed support before
					enabling this property.
- qcom,swire-control:			A boolean property which indicates if the LAB/IBB is
					controlled by the SWIRE interface. Enable only
					if qcom,qpnp-labibb-mode = "amoled".
- qcom,labibb-ttw-force-lab-on:		A boolean property which forces LAB to be
					always on during TTW mode.
- qcom,skip-2nd-swire-cmd:		A boolean property which indicates if
					the second SWIRE command needs to be skipped.
- qcom,swire-2nd-cmd-delay:		An integer value which specifes the
					delay in millisecs between the first and second
					SWIRE command. If not specified this value
					defaults to 20ms. This delay is applied only
					if 'qcom,skip-2nd-swire-cmd' is defined.
- qcom,swire-ibb-ps-enable-delay:	An integer value which specifes the delay
					in millisecs to enable IBB pulse-skipping
					after the skip-2nd-swire-cmd workaround is applied.
					If not specified this value default to 200ms.
					This property is applicable only if
					'qcom,skip-2nd-swire-cmd' is specified.
- qcom,labibb-standalone:		A boolean property which forces LAB and
					IBB to operate in standalone mode. If
					this is not specified, then LAB and IBB
					are controlled together in dual mode.
- parent-supply:			Parent supply that is needed for LAB
					and IBB regulators. This will be mostly
					needed when LAB and IBB are operating
					in standalone mode to vote for MBG.

Following properties are available only for PM660A:

- qcom,pbs-control:			A boolean property which indicates if
					the LAB/IBB is controlled by the PBS
					sequencer. If this mode is enabled the
					PBS sequencer does the SWIRE remapping
					and program the voltages based on the
					SWIRE count.

LAB subnode required properties:

- reg:				Specifies the SPMI address and size for this peripheral.
- reg-names:			Register names. Must be "lab".
- regulator-name:		A string used to describe the regulator.
- regulator-min-microvolt:	Minimum voltage in microvolts supported by this regulator.
- regulator-max-microvolt:	Maximum voltage in microvolts supported by this regulator.

- qcom,qpnp-lab-min-voltage:	The minimum voltage in microvolts LAB regulator can support.
- qcom,qpnp-lab-step-size:	The step size in microvolts of LAB regulator.
- qcom,qpnp-lab-slew-rate:	The time in us taken by the regulator to change
				voltage value in one step.

- qcom,qpnp-lab-init-voltage:		The default initial voltage when the bootloader
					does not turn on LAB regulator.
- qcom,qpnp-lab-init-amoled-voltage:	The default output voltage when LAB regulator
					is configured in amoled mode.
- qcom,qpnp-lab-init-lcd-voltage: 	The default output voltage when LAB regulator
					is configured in lcd mode.
- qcom,qpnp-lab-ps-threshold:		The threshold in mA of Pulse Skip Mode for
					LAB regulator. Supported values for
					PMI8994/6 are 20, 30, 40 and 50.
					Supported values for PMI8998/PM660A are
					50, 60, 70 and 80.
- interrupts:				Specify the interrupts as per the interrupt
					encoding.
					Currently "lab-vreg-ok" is required and "lab-sc_err"
					is optional for LCD mode in pmi8998.
					For AMOLED mode, "lab-vreg-ok" is required
					only when SWIRE control is enabled and skipping
					2nd SWIRE pulse is required in pmi8952/8996.
- interrupt-names:			Interrupt names to match up 1-to-1 with
					the interrupts specified in 'interrupts'
					property.

LAB subnode optional properties:

- qcom,qpnp-lab-current-sense:		If this property is specified, the LAB current
					sense gain will be programmed for LAB regulator.
					Otherwise, LAB current sense gain will be
					default to "1x". A string is used to specify the
					LAB current sense gain. Could be "0.5x" or "1x"
					or "1.5x" or "2x". For e.g. "0.5x" means current
					sense gain is 0.5.
- qcom,qpnp-lab-ps-enable:		A boolean proerty which upon set will enable
					pulse skip mode for LAB regulator. Otherwise,
					it is disabled.
- qcom,qpnp-lab-full-pull-down:		A boolean property which upon set will enable
					the pull down strength of LAB regulator to
					full. Otherwise, the pull down strength is
					configured to half.
- qcom,qpnp-lab-pull-down-enable:	A boolean property which upon set will enable
					the pull down for LAB regulator. Otherwise,
					it is disabled.
- qcom,qpnp-lab-max-precharge-enable:	A boolean property which upon set will
					enable fast precharge. Otherwise, it is
					disabled.
- qcom,qpnp-lab-ring-suppression-enable:	A boolean property which upon set will
						enable ring suppression for LAB
						regulator. Otherwise, it is disabled.
- qcom,qpnp-lab-limit-max-current-enable:	A boolean property which upon set will
						enforce maximum inductor current constraint
						for LAB regulator. Otherwise, there is no
						maximum current constraint.
- qcom,qpnp-lab-switching-clock-frequency:	The PWM switching clock frequency in
						kHz of Lab regulator, Supported values
						are: 3200, 2740, 2400, 2130, 1920,
						1750, 1600, 1480, 1370, 1280, 1200,
						1130, 1070, 1010, 960, 910.
- qcom,qpnp-lab-limit-maximum-current:		The maximum inductor current limit in
						mA of LAB regulator. Supported values
						are 200, 400, 600, 800, 1000, 1200,
						1400 and 1600.
- qcom,qpnp-lab-pfet-size:		PFET size in percentage. Supported values
					are 25, 50, 75 and 100.
- qcom,qpnp-lab-nfet-size:		NFET size in percentage. Supported values
					are 25, 50, 75 and 100.
- qcom,qpnp-lab-max-precharge-time:	Precharge time in uS for LAB regulator.
					Supported values are 200, 300, 400 and 500.
					Suggested values for LCD and AMOLED mode
					are 500 and 300uS respectively.
- qcom,qpnp-lab-use-default-voltage:	A boolean property which upon set will
					use the value specified in
					qcom,qpnp-lab-init-voltage property.
					This will be used only if the bootloader
					doesn't configure the output voltage
					already. If it it not specified, then
					output voltage can be configured to
					any value in the allowed limit.
- qcom,notify-lab-vreg-ok-sts:		A boolean property which upon set will
					poll and notify the lab_vreg_ok status.
- qcom,qpnp-lab-sc-wait-time-ms:	This property is used to specify the time
					(in ms) to poll for the short circuit
					detection. If not specified the default time
					is 5 sec.

Following properties are available only for PM660A:

- qcom,qpnp-lab-soft-start:		The soft start time in us of LAB regulator.
					Supported value are 200, 400, 600 and 800.
- qcom,qpnp-lab-ldo-pulldown-enable:	This property is used to enable/disable
					the LDO	pull down.
					1 - enable pulldown
					0 - disable pulldown
- qcom,qpnp-lab-enable-sw-high-psrr:	A boolean property to enable the
					software high psrr
					(Power Suppy Rejection Rate) mode.
- qcom,qpnp-lab-high-psrr-src-select:	This property is used to select the LAB
					HW high psrr source.
					The supported values are:
					0 = Either vph_high or high_psrr enable
					1 = vph_high only
					2 = high_psrr enable only
					3 = Either vph_high or high_psrr enable
					This property is not valid if the
					qcom,qpnp-lab-enable-sw-high-psrr property
					is specified.
- qcom,qpnp-lab-vref-high-psrr-select:	This property is required if the
					qcom,qpnp-lab-high-psrr-src-select is
					specified. The supported values (in mV)
					are 350, 400, 450 and 500. Once the
					rejection rate crosses the selected
					high-psrr voltage the LDO is enabled
					based on the value specified under
					qcom,qpnp-lab-high-psrr-src-select
					property.
					This property is not valid if the
					qcom,qpnp-lab-enable-sw-high-psrr property
					is specified.

IBB subnode required properties:

- reg:				Specifies the SPMI address and size for this peripheral.
- reg-names:			Register names. Must be "ibb".
- regulator-name:		A string used to describe the regulator.
- regulator-min-microvolt:	Minimum voltage in microvolts supported by this regulator.
- regulator-max-microvolt:	Maximum voltage in microvolts supported by this regulator.

- qcom,qpnp-ibb-min-voltage:	The minimum voltage in microvolts IBB regulator can support.
- qcom,qpnp-ibb-step-size:	The step size in microvolts of IBB regulator.
- qcom,qpnp-ibb-soft-start:	The soft start time in us of IBB regulator.

- qcom,qpnp-ibb-init-voltage:	The default initial voltage when the bootloader does
				not turn on IBB regulator.
- qcom,qpnp-ibb-init-amoled-voltage:	The default output voltage when IBB regulator
					is configured in amoled mode.
- qcom,qpnp-ibb-init-lcd-voltage: 	The default output voltage when IBB regulator
					is configured in lcd mode.

IBB subnode optional properties:

- interrupts:				Specify the interrupts as per the interrupt
					encoding.
					Currently "ibb-sc-err" could be used for LCD mode
					in pmi8998 to detect the short circuit fault.
- interrupt-names:			Interrupt names to match up 1-to-1 with
					the interrupts specified in 'interrupts'
					property.

- qcom,qpnp-ibb-discharge-resistor:	The discharge resistor in Kilo Ohms which
					controls the soft start time. Supported values
					are 300, 64, 32 and 16.

- qcom,qpnp-ibb-slew-rate:	The time (in us) taken by the regulator to change
				voltage value in one step. This property is not
				applicable to PM660A.
				The following properties can be used as an
				alternate.
					qcom,qpnp-ibb-slew-rate-config
					qcom,qpnp-ibb-fast-slew-rate
					qcom,qpnp-ibb-slow-slew-rate
- qcom,qpnp-ibb-ps-enable:		A boolean property which upon set will enable
					pulse skip mode for IBB regulator. Otherwise,
					it is disabled.
- qcom,qpnp-ibb-num-swire-trans:	The number of SWIRE transactions
					after which the pulse skipping is
					enabled. This property is required when
					qpnp-ibb-smart-ps-enable property is
					set.
- qcom,qpnp-ibb-neg-curr-limit:		This property must be set when the
					qpnp-ibb-smart-ps-enable is specified.
					The supported values in mA are 1, 2, 3,
					4, 5, 6 and 7. The recommended value is
- qcom,qpnp-ibb-full-pull-down:		A boolean property which upon set will
					enable the pull down strength of IBB
					regulator to full. Otherwise, the pull
					down strength is configured to half.
- qcom,qpnp-ibb-pull-down-enable:	A boolean property which upon set will enable
					the pull down for IBB regulator. Otherwise,
					it is disabled.
- qcom,qpnp-ibb-lab-pwrup-delay:	Power up delay (in us) for IBB regulator when
					it is enabled or turned on. Supported values
					are 1000, 2000, 4000 and 8000.
- qcom,qpnp-ibb-lab-pwrdn-delay:	Power down delay (in us) for IBB regulator
					when it is disabled or turned off. Supported
					values are 1000, 2000, 4000 and 8000.
- qcom,qpnp-ibb-switching-clock-frequency:	The PWM switching clock frequency in
						kHz of IBB regulator. Supported values
						are: 3200, 2740, 2400, 2130, 1920,
						1750, 1600, 1480, 1370, 1280, 1200,
						1130, 1070, 1010, 960, 910.
- qcom,qpnp-ibb-limit-maximum-current:		The maximum inductor current limit in
						mA of IBB regulator. Supported values
						are: 0, 50, 100, 150, 200, 250, 300,
						350, 400, 450, 500, 550, 600, 650, 700,
						750, 800, 850, 900, 950, 1000, 1050,
						1100, 1150, 1200, 1250, 1300, 1350,
						1400, 1450, 1500 and 1550.
- qcom,qpnp-ibb-debounce-cycle:			The debounce cycle of IBB regulator.
						Supported values are 8, 16, 32 and 64.
- qcom,qpnp-ibb-en-discharge:			A boolean property which upon set will
						enable discharge for IBB regulator.
						Otherwise, it is kept disabled.
- qcom,qpnp-ibb-ring-suppression-enable:	A boolean property which upon set will
						enable ring suppression for IBB
						regulator. Otherwise, it is disabled.
- qcom,qpnp-ibb-limit-max-current-enable:	A boolean property which upon set will
						enforce maximum inductor current constraint
						for IBB regulator. Otherwise, there is no
						maximum current constraint.
- qcom,qpnp-ibb-use-default-voltage:		A boolean property which upon set will
						use the value specified in
						qcom,qpnp-ibb-init-voltage property.
						This will be used only if the bootloader
						doesn't configure the output voltage
						already. If it it not specified, then
						output voltage can be configured to
						any value in the allowed limit.
- qcom,output-voltage-one-pulse:		The expected voltage (in mV) of VDISN signal
						on the first SWIRE pulse. This property
						can be specified only if 'qcom,swire-control'
						is defined. The minimum and maximum values
						are 1400mV and 7700mV.

Following properties are available only for PM660A:

- qcom,qpnp-ibb-smart-ps-enable:	A boolean property which upon set
					enables smart pulse skip mode for IBB
					regulator. Otherwise, it is disabled.
					This property is only applicable to
					PM660A.
- qcom,qpnp-ibb-enable-pfm-mode:	A boolean property which enables the IBB to work
					in pfm mode.
- qcom,qpnp-ibb-pfm-peak-curr:		The PFM peak current limit settings in mA.
					Supported values are 150, 200, 250, 300,
					350, 400, 450 and 500. This property is
					required if the qcom,qpnp-ibb-enable-pfm-mode
					is true.
- qcom,qpnp-ibb-pfm-hysteresis:		The PFM hysteresis voltage threshold in mV.
					Supported values are 0, 25 and 50.
					This property is required if the
					qcom,qpnp-ibb-enable-pfm-mode is specified.
- qcom,qpnp-ibb-overload-blank:		A boolean property which upon set enables
					the IBB overload blanking.
- qcom,qpnp-ibb-overload-debounce:	The expected overload debounce time (in ms)
					values are 1, 2, 4 and 8.
					This property is required only when the
					qcom,qpnp-ibb-overload-blank is set.
- qcom,qpnp-ibb-vreg-ok-debounce:	The expected vreg-ok-debounce time (us)
					values are 4, 8, 16 and 32.
					This property is required only when the
					qcom,qpnp-ibb-overload-blank is set.
- qcom,qpnp-ibb-slew-rate-config:	A boolean property to configure the
					ibb fast/slow slew rate.
					Either qcom,qpnp-ibb-fast-slew-rate or
					qcom,qpnp-ibb-slow-slew-rate has to be
					specified. Otherwise the
					qcom,qpnp-ibb-slow-slew-rate takes precedence
					over the qcom,qpnp-ibb-fast-slew-rate.
- qcom,qpnp-ibb-fast-slew-rate:		This property is required if the qcom,
					qpnp-ibb-slew-rate-config property is
					specified. Supported values (in us) are
					100, 200, 500, 1000, 2000, 10000, 12000
					and 15000.
- qcom,qpnp-ibb-slow-slew-rate:		This property is required if the qcom,
					qpnp-ibb-slew-rate-config property is
					specified. Supported values (in us) are
					100, 200, 500, 1000, 2000, 10000, 12000
					and 15000.

Example:
	qcom,pmi8994@3 {
		qpnp-labibb-regulator {
			compatible = "qcom,qpnp-labibb-regulator";
			#address-cells = <1>;
			#size-cells = <1>;
			qcom,qpnp-labibb-mode = "lcd";
			qcom,pmic-revid = <&pmi8994_revid>;
			qcom,skip-2nd-swire-cmd;

			lab_regulator: qcom,lab@de00 {
				reg = <0xde00 0x100>;
				reg-names = "lab";

				interrupts = <0x3 0xde 0x0
						IRQ_TYPE_EDGE_RISING>;
                                interrupt-names = "lab-vreg-ok";

				regulator-name = "lab_reg";
				regulator-min-microvolt = <4600000>;
				regulator-max-microvolt = <6000000>;

				qcom,qpnp-lab-min-voltage = <4600000>;
				qcom,qpnp-lab-step-size = <100000>;
				qcom,qpnp-lab-slew-rate = <5000>;
				qcom,qpnp-lab-use-default-voltage;
				qcom,qpnp-lab-init-voltage = <5500000>;
				qcom,qpnp-lab-init-amoled-voltage = <4600000>;
				qcom,qpnp-lab-init-lcd-voltage = <5500000>;

				qcom,qpnp-lab-soft-start = <400>;

				qcom,qpnp-lab-full-pull-down;
				qcom,qpnp-lab-pull-down-enable;
				qcom,qpnp-lab-switching-clock-frequency = <1600>;
				qcom,qpnp-lab-limit-maximum-current = <1600>;
				qcom,qpnp-lab-limit-max-current-enable;
				qcom,qpnp-lab-ps-threshold = <40>;
				qcom,qpnp-lab-ps-enable;
				qcom,qpnp-lab-nfet-size = <100>;
				qcom,qpnp-lab-pfet-size = <100>;
				qcom,qpnp-lab-max-precharge-time = <200>;
			};

			ibb_regulator: qcom,ibb@dc00 {
				reg = <0xdc00 0x100>;
				reg-names = "ibb_reg";
				regulator-name = "ibb_reg";

				regulator-min-microvolt = <4600000>;
				regulator-max-microvolt = <6000000>;

				qcom,qpnp-ibb-min-voltage = <1400000>;
				qcom,qpnp-ibb-step-size = <100000>;
				qcom,qpnp-ibb-slew-rate = <2000000>;
				qcom,qpnp-ibb-use-default-voltage;
				qcom,qpnp-ibb-init-voltage = <5500000>;
				qcom,qpnp-ibb-init-amoled-voltage = <4000000>;
				qcom,qpnp-ibb-init-lcd-voltage = <5500000>;

				qcom,qpnp-ibb-soft-start = <400>;

				qcom,qpnp-ibb-discharge-resistor = <300>;
				qcom,qpnp-ibb-lab-pwrup-delay = <8000>;
				qcom,qpnp-ibb-lab-pwrdn-delay = <8000>;
				qcom,qpnp-ibb-en-discharge;

				qcom,qpnp-ibb-full-pull-down;
				qcom,qpnp-ibb-pull-down-enable;
				qcom,qpnp-ibb-switching-clock-frequency = <1480>;
				qcom,qpnp-ibb-limit-maximum-current = <1550>;
				qcom,qpnp-ibb-debounce-cycle = <16>;
				qcom,qpnp-ibb-limit-max-current-enable;
				qcom,qpnp-ibb-ps-enable;
			};

		};
	};
